/**
 * Khởi tạo 1 đối tượng AJAX
 * 
 * @return 1 đối tượng AJAX nếu thành công, null nếu thất bại (có thể do trình
 *         duyệt không hỗ trợ AJAX hoặc chế độ sử dụng Javacript đã bị tắt đi)
 */
function newAjaxInstance() {
	var xmlHttp;
	try {
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				return null;
			}
		}
	}
	return xmlHttp;
}

/**
 * Kiểm tra xem quá trình truy vấn dữ liệu bằng 1 đối tượng AJAX đã hoàn thành
 * hay chưa
 * 
 * @param ajaxInstance
 *            đối tượng AJAX thực hiện request
 * 
 * @return 1 nếu đã truy vấn xong và dữ liệu hợp lệ, 0 nếu không truy vấn được,
 *         -1 nếu vẫn đang thực hiện quá trình truy vấn
 */
function isFinished(ajaxInstance) {
	if (ajaxInstance.readyState == 4 || ajaxInstance.readyState == "complete") {
		return ajaxInstance.status == 200 ? 1 : 0;
	}
	return -1;
}

/**
 * Lấy dữ liệu của 1 node trong văn bản XML
 * 
 * @param xmlNode
 *            node cần lấy dữ liệu
 * 
 * @return dữ liệu bên trong node đó
 */
function getNodeValue(xmlNode) {
	return xmlNode.childNodes[0].nodeValue;
}

/**
 * Thực hiện request bằng phương thức POST
 * 
 * @param ajaxInstance
 *            đối tượng AJAX thực hiện request
 * 
 * @param params
 *            dãy các tham số
 *            (biến_1=giá_trị_1&biến_2=giá_trị_2&...&biến_n=giá_trị_n)
 * @param url
 *            trang nhận và xử lý request (có thể kèm theo dữ liệu vào url)
 * @return void
 */
function requestPost(ajaxInstance, params, url) {	
	params += "&randomNoCache="+Math.random();
	ajaxInstance.open("POST", url, true);
	ajaxInstance.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajaxInstance.setRequestHeader("Content-length", params.length);
	ajaxInstance.setRequestHeader("Connection", "close");			
	ajaxInstance.send(params);	
}

/**
 * Thực hiện request bằng phương thức GET
 * 
 * @param ajaxInstance
 *            đối tượng AJAX thực hiện request
 * 
 * @param url
 *            url và dãy các tham số
 *            (biến_1=giá_trị_1&biến_2=giá_trị_2&...&biến_n=giá_trị_n)
 * @return void
 */
function requestGet(ajaxInstance, url) {
	url += "&randomNoCache="+Math.random();
	ajaxInstance.open("GET", url, true);
	ajaxInstance.send(null);
}